package multiplex.facade;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; 

import multiplex.dataaccess.dao.LocalizacaoDao;
import multiplex.dataaccess.dao.SalaDao;
import multiplex.model.Filme;
import multiplex.model.Localizacao;
import multiplex.model.Sala;
import multiplex.model.Sessao;

public class SalaFacade {
	private SalaDao salaDAO;
	
	public SalaFacade(){
		salaDAO = new SalaDao();
	}
	
	public List<Sala> getSalas(){
		return salaDAO.getAll();
	}

	public boolean cadSala(Sala sala){
		try{
			salaDAO.save(sala);
			return true;
		}catch(Throwable e){
			return false;
		}
	}

	public void alteraSala(Sala sala){
		salaDAO.update(sala);
	}
	
	public void removeSala(Sala sala){
		salaDAO.remove(sala);
	}
	
	public List<Sala> getSala(Localizacao oLocalizacao){
		return salaDAO.getAllFromLocalizacao(oLocalizacao);
	}
	
	public List<Sala> getSalaByFilmeCidade(Filme oFilme, String cidade){
		LocalizacaoDao localizacaoDAO = new LocalizacaoDao();
		List<Sala> result = new ArrayList<Sala>();
		List<Localizacao> localizacoes = localizacaoDAO.getAllFromFilme(oFilme);
		List<Localizacao> localizacoesFiltradas =new ArrayList<Localizacao>();
		List<Sessao> sessoes;
		Calendar calendar = Calendar.getInstance();
		Calendar calendar4 = Calendar.getInstance();
		calendar4.add(Calendar.DAY_OF_YEAR,4);
		for (Localizacao localizacao : localizacoes) {
			if(localizacao.getCidade().equals(cidade))
				localizacoesFiltradas.add(localizacao);
		}
		for (Localizacao localizacao : localizacoesFiltradas) {
			for (Sala sala : localizacao.getSalas()) {
				sessoes = sala.getSessoes();
				for (Sessao sessao : sessoes) {
					if(sessao.getDataInicio().after(calendar) && sessao.getDataInicio().before(calendar4)){
						result.add(sala);
						break;
					}
				}
			}
		}		
		return result;
	}
	
	
}
